package br.com.sgdee.dao;

import java.io.Serializable;
import java.util.List;

import br.com.sgdee.dto.GenericoDTO;


/**
 * Classe contrato que define métodos padrões de transações na aplicação
 * 
 * @author Bruno
 *
 * @param <T>
 * @param <S>
 */
public interface GenericoDAO<T, S extends GenericoDTO> extends Serializable {

	
	/**
	 * Método que faz buscas a partir de um filtro
	 * 
	 * @param filtro
	 * @return
	 */
	List<T> recuperarTodosFiltro(S filtro);
	
	
	/**
	 * Retorna quantidade de registros a partir de um filtro
	 * 
	 * @param filtro
	 * @return
	 */
	Integer quantidadeRegistros(S filtro);
	
	
	/**
	 * Salva ou atualiza um entidade
	 * 
	 * @param entidade
	 */
	void salvarOuAtualizar(T entidade);
	
	
	/**
	 * exclui um registro do banco de dados
	 * 
	 * @param entidade
	 */
	void excluirRegistro(T entidade);
	
}
